#include "sortcanvas.h"
#include "ui_sortcanvas.h"

#include <QTime>
#include <QDebug>

SortCanvas::SortCanvas(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SortCanvas)
{
    ui->setupUi(this);
    //1、父窗体样式不生效？
    setAttribute(Qt::WA_StyledBackground, true);



}

SortCanvas::~SortCanvas()
{
    delete ui;
}

void SortCanvas::dataReset(SortObejct *sortObj, int count)
{
    //重置数据，目前sortobj是一次性的
    if(_sortObj)
    {
//值得注意的是如果该QObject里面事件是个死循环，那么该函数就等不到所有事件处理完，没有效果。
//清理内存
        _sortObj->deleteLater();
        _sortObj=nullptr;
    }
    _sortObj=sortObj;
    qDebug()<<"类型:"<<sortObj<<"个数："<<count;
    if(_sortObj){
        connect(_sortObj,&SortObejct::sortUpdated,this,[this]{
            update();
        });
        connect(_sortObj,&SortObejct::sortFinished,this,[this]{
            update();
            qDebug()<<"排序完成";
            emit finished();
        });
        _sortObj->dataReset(count);
    }
    update();//填充好数据刷新
}

void SortCanvas::startSort(int interval)
{
    //开始排序
    if(_sortObj){
        _sortObj->runStart(interval);
    }else{
        qDebug()<<"开始";
        emit finished();
    }
    update();
}

void SortCanvas::paintEvent(QPaintEvent *event)
{
    QWidget::paintEvent(event);

    QPainter painter(this);

    //设置背景色
  //  painter.fillRect(rect(),QColor(20,20,20));
    if(_sortObj){
        _sortObj->paint(&painter,width(),height());
    }
}
